"""
宿舍电费公平分摊
这个月的宿舍电费花了100元，宿舍有6个人，大家要凑够100元来缴纳这个电费。
为了公平起见，按照每个人的用电器功率和每天用电时间计算比率。
设计一个程序，让大家输入自己的用电器功率（有1到多个电器）以及对应的平均每天使用时间，结束一个人输入后打印该同学的用电总功率，
最后按比率计算每个人应出多少钱。

提示：
1. 你可以使用一个循环来收集每个室友的用电信息。每次循环中，再使用一个子循环来收集该室友的所有用电器的功率和使用时间，当捕获到非用电信息时（即非数字）结束循环。
2. 用电总功耗可以通过功率乘以使用时间得到。所有室友的用电总功耗之和就是宿舍的总功耗。
3. 每个室友应缴纳的电费 = (该室友的总功耗 / 宿舍的总功耗) * 100元。
"""


class Dorm:
    def __init__(self, student_count, total_usage):
        """
        实例化方法，对类进行初始化
        :param student_count:
        :param total_usage:
        """
        self.student_count = student_count
        self.total_usage = total_usage
        self.total_power_usages = []
        self.payments = []

    def power_usage_each(self):
        """
        获取某个人的所有的用电信息
        """
        count = 1
        total_power_usages_each = 0
        while True:
            try:
                power = eval(input(f"  请输入用电器{count}的功率（W）："))
                time = eval(input("  请输入平均每天使用时间（h）："))
                total_power_usages_each += power * time
                count += 1
            except:
                print("输入结束，当前总功耗为:", total_power_usages_each, "Wh\n")
                break
        self.total_power_usages.append(total_power_usages_each)

    def each_payment(self):
        """
        计算要出多少钱
        """
        total_power = sum(self.total_power_usages)  # 总功耗
        self.payments = [round(100 * usage / total_power, 2) for usage in self.total_power_usages]  # 列表推导式内计算每个人的用电比率 * 100，等到要给多少钱

    def calculate_payment(self):
        """
        类入口
        :return:
        """
        for i in range(self.student_count):
            print(f"请第{i + 1}位室友输入用电信息：")
            self.power_usage_each()

        self.each_payment()
        for i, payment in enumerate(self.payments):
            print(f"第{i + 1}位室友应缴纳电费：{payment}元")


if __name__ == '__main__':
    dorm = Dorm(student_count=6, total_usage=200)
    dorm.calculate_payment()
